﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data.SqlClient;
using BYGamesDLL;

namespace BYGamesBLL
{
    public class ClienteDAO : DAO<Cliente>
    {

        protected SqlConnection con;
        protected SqlCommand cmd;
        private static ClienteDAO instance = null;

        private ClienteDAO(string conexao)
        {
            con = new SqlConnection(conexao);
            cmd = new SqlCommand("",con);
        }

        public static ClienteDAO GetInstance(string conexao)
        {
            if (instance == null)
            {
                instance = new ClienteDAO(conexao);
            }
            return instance;
        }

        public void Inserir(Cliente objeto)
        {
            cmd.CommandText = "INSERT INTO cliente (email, senha, nome_cliente, rua, num_end, bairro, cep, cidade, estado, cpf, status) values " +
                "('" + objeto.Email + "','" + objeto.Senha + "','" + objeto.Nome + "','" +
                objeto.Endereco.Rua + "'," + objeto.Endereco.Numero + ",'" + objeto.Endereco.Bairro + "'," + objeto.Endereco.Cep + ",'"+
                objeto.Endereco.Cidade + "','" + objeto.Endereco.Estado + "',"+objeto.Cpf+","+((objeto.Status)?1:0)+")";
            con.Open();
            cmd.ExecuteReader();
            con.Close();
        }

        public void Remover(Cliente objeto)
        {
            cmd.CommandText = "DELETE FROM cliente WHERE cpf = " + objeto.Cpf;
            con.Open();
            cmd.ExecuteReader();
            con.Close();
        }

        public void Atualizar(Cliente objeto)
        {
            cmd.CommandText = "UPDATE cliente SET email = '" + objeto.Email + "', senha = '" + objeto.Senha + "', nome_cliente = '" + objeto.Nome + "', rua = '" +
                objeto.Endereco.Rua + "', num_end = " + objeto.Endereco.Numero + ", bairro = '" + objeto.Endereco.Bairro + "', cep = " + objeto.Endereco.Cep + ", cidade = '" + objeto.Endereco.Cidade +
                "', estado = '" + objeto.Endereco.Estado + "', status = "+((objeto.Status)?1:0)+" WHERE cpf = " + objeto.Cpf;
            con.Open();
            cmd.ExecuteReader();
            con.Close();
        }

        public Cliente Get(int id)
        {
            Cliente c = new Cliente();
            cmd.CommandText = "SELECT * FROM cliente WHERE cpf = " + id;
            con.Open();
            SqlDataReader r = cmd.ExecuteReader();
            while (r.Read())
            {
                c.Email = Convert.ToString(r["email"]);
                c.Senha = Convert.ToString(r["senha"]);
                c.Nome = Convert.ToString(r["nome_cliente"]);
                c.Endereco.Rua = Convert.ToString(r["rua"]);
                c.Endereco.Numero = Convert.ToInt32(r["num_end"]);
                c.Endereco.Bairro = Convert.ToString(r["bairro"]);
                c.Endereco.Cep = Convert.ToInt32(r["cep"]);
                c.Endereco.Cidade = Convert.ToString(r["cidade"]);
                c.Endereco.Estado = Convert.ToString(r["estado"]);
                c.Cpf = Convert.ToInt32(r["cpf"]);
                c.Status = Convert.ToBoolean(r["status"]);
            }
            r.Close();
            con.Close();
            return c;
        }

        public Cliente Login(String email, String senha)
        {
            Cliente c = new Cliente();
            Endereco endereco = new Endereco();
            cmd.CommandText = "SELECT * FROM cliente WHERE email = '" + email + "' AND senha = '" + senha + "'";
            con.Open();
            SqlDataReader r = cmd.ExecuteReader();
            while (r.Read())
            {
                c.Email = Convert.ToString(r["email"]);
                c.Senha = Convert.ToString(r["senha"]);
                c.Nome = Convert.ToString(r["nome_cliente"]);
                endereco.Rua = Convert.ToString(r["rua"]);
                endereco.Numero = Convert.ToInt32(r["num_end"]);
                endereco.Bairro = Convert.ToString(r["bairro"]);
                endereco.Cep = Convert.ToInt32(r["cep"]);
                endereco.Cidade = Convert.ToString(r["cidade"]);
                endereco.Estado = Convert.ToString(r["estado"]);
                c.Endereco = endereco;
                c.Cpf = Convert.ToInt32(r["cpf"]);
                c.Status = Convert.ToBoolean(r["status"]);
            }
            r.Close();
            con.Close();
            return c;
        }

        public List<Cliente> GetAll()
        {
            
            cmd.CommandText = "SELECT * FROM cliente";
            con.Open();
            SqlDataReader r = cmd.ExecuteReader();
            List<Cliente> clientes = new List<Cliente>();
            while (r.Read())
            {
                Cliente c = new Cliente();
                c.Email = Convert.ToString(r["email"]);
                c.Senha = Convert.ToString(r["senha"]);
                c.Nome = Convert.ToString(r["nome_cliente"]);
                c.Endereco.Rua = Convert.ToString(r["rua"]);
                c.Endereco.Numero = Convert.ToInt32(r["num_end"]);
                c.Endereco.Bairro = Convert.ToString(r["bairro"]);
                c.Endereco.Cep = Convert.ToInt32(r["cep"]);
                c.Endereco.Cidade = Convert.ToString(r["cidade"]);
                c.Endereco.Estado = Convert.ToString(r["estado"]);
                c.Cpf = Convert.ToInt32(r["cpf"]);
                c.Status = Convert.ToBoolean(r["status"]);
                clientes.Add(c);
            }
            r.Close();
            con.Close();
            return clientes;

        }
    }
}
